#ifdef __cplusplus
extern "C" {
#endif

#include "thread.h"
#include <stdio.h>
#include "socket.h"

// 定义线程与处理函数的映射
s_mapTh2Hnd g_mapTh2Hnd[] = {
    {1, 0, tcp_server},
    {1, 0, tcp_client},
    {1, 0, udp_server},
    {1, 0, udp_client},
};

pthread_t thread_id[4];  // 用于存储线程ID的数组

// 创建线程函数
int thread_create() {

    // 创建 TCP 服务器线程
    if (pthread_create(&thread_id[1], NULL, (void *(*)(void *))g_mapTh2Hnd[0].thread_Handler, NULL) != 0) {
        perror("创建 TCP 服务器线程失败");
        return -1;
    }

    // 创建 TCP 客户端线程
    if (pthread_create(&thread_id[2], NULL, (void *(*)(void *))g_mapTh2Hnd[1].thread_Handler, NULL) != 0) {
        perror("创建 TCP 客户端线程失败");
        return -1;
    }

    // 创建 UDP 服务器线程（如果需要启用 UDP 服务器线程，请取消注释）
    // if (pthread_create(&thread_id[3], NULL, (void *(*)(void *))g_mapTh2Hnd[2].thread_Handler, NULL) != 0) {
    //     perror("创建 UDP 服务器线程失败");
    //     return -1;
    // }

    // 创建 UDP 客户端线程（如果需要启用 UDP 客户端线程，请取消注释）
    // if (pthread_create(&thread_id[4], NULL, (void *(*)(void *))g_mapTh2Hnd[3].thread_Handler, NULL) != 0) {
    //     perror("创建 UDP 客户端线程失败");
    //     return -1;
    // }

    return 0;
}

// 等待线程结束函数
int thread_wait() {
    // 等待 TCP 服务器线程结束
    pthread_join(thread_id[1], NULL);  // 等待 TCP 服务器线程完成
    pthread_join(thread_id[2], NULL);  // 等待 TCP 客户端线程完成

    // 如果启用了 UDP 相关线程，取消注释以下代码
    // pthread_join(thread_id[3], NULL);  // 等待 UDP 服务器线程完成
    // pthread_join(thread_id[4], NULL);  // 等待 UDP 客户端线程完成

    return 0;
}

#ifdef __cplusplus
}
#endif
